home *** CD-ROM | disk | FTP | other *** search
- ///////////////////////////////////////////////
- // delta_z.cpp
-
- #include "stdafx.h"
- #include "itriazon.h"
- #include "itriadoc.h"
- #include "itriavw.h"
- #include "external.h"
- #include "rw1.h"
- #include "rw2.h"
- #include "math.h"
- #include "convolut.h"
- #include "nthorder.h"
- #include "post.h"
- #include "orient.h"
- #include "filter12.h"
-
- void CIterationsView::Delta_z(double dzx, double dzy)
- {
- switch (nFilter)
- {
- case 1:
-
- if (CRMAX > 2 || CIMAX > 2)
- {
- if (CRMAX > CIMAX)
- dmax = CRMAX;
- else
- dmax = CIMAX;
- }
- else
- dmax = 2;
-
- delta5 = dmax/5;
-
- ntemp=(int)log(fabs(dzx*dzx+dzy*dzy));
-
- for (dlz=0 ; dlz<=dmax ; dlz+=delta5)
- {
- if (fabs(dzx) > dlz || fabs(dzy) > dlz) jrw+=ntemp;
- else jrw-=ntemp;
- }
- break;
-
- case 2:
- if (CRMAX > 2 || CIMAX > 2)
- {
- if (CRMAX > CIMAX)
- dmax = CRMAX;
- else
- dmax = CIMAX;
- }
- else
- dmax = 2;
-
- delta5 = dmax/5;
-
- ntemp = (int)(1/(sqrt(dzx*dzx+dzy*dzy)));
- for (dlz=0 ; dlz<=dmax ; dlz+=delta5)
- {
- if (fabs(dzx) > dlz || fabs(dzy) > dlz) jrw-=ntemp;
- else jrw+=ntemp;
- }
- break;
-
- case 3:
- if (CRMAX > 2 || CIMAX > 2)
- {
- if (CRMAX > CIMAX)
- dmax = CRMAX;
- else
- dmax = CIMAX;
- }
- else
- dmax = 2;
-
- delta10 = dmax/10;
-
- for (dlz=0 ; dlz<=dmax ; dlz+=delta10)
- {
- if (fabs(dzx) > dlz || fabs(dzy) > dlz) jrw+=nFF;
- else jrw-=nFF;
- }
- break;
-
- case 4:
- for (dlz=0 ; dlz<=2 ; dlz+=.25)
- {
- if (fabs(dzx) > dlz && fabs(dzy) > dlz) jrw-=nFF;
- else jrw+=nFF;
- }
- break;
-
- case 5:
- for (dlz=0 ; dlz<=2 ; dlz+=.25)
- {
- if (fabs(dzx) > dlz && fabs(dzy) > dlz) jrw-=nFF;
- else jrw+=nFF;
- if (fabs(dzx) > dlz || fabs(dzy) > dlz) jrw-=nFF;
- else jrw+=nFF;
- }
- break;
-
- case 6:
- if (dzx > CRMID) jrw-=nFF;
- else jrw+=nFF;
- if (dzy > CIMID) jrw-=nFF;
- else jrw+=nFF;
- break;
-
- case 7:
-
- //if (dzx*cy + cx*dzy >= 0)
- // jrw+=nFF;
- //else
- // jrw-=nFF;
-
- if (dzx > CRMID && dzy < CIMID) jrw+=nFF;
- else jrw-=nFF;
- if (dzx < CRMID && dzy > CIMID) jrw+=nFF;
- else jrw-=nFF;
- break;
-
- case 8:
- if (dzx > CRMID && dzy > CIMID) jrw-=nFF;
- else jrw+=nFF;
- if (dzx > CRMID && dzy > CIMID) jrw-=nFF;
- else jrw+=nFF;
- if (dzx > CRMID || dzy > CIMID) jrw-=nFF;
- else jrw+=nFF;
- if (dzx > CRMID || dzy > CIMID) jrw-=nFF;
- else jrw+=nFF;
- break;
-
- case 9:
-
- if (fabs(dzx) <= CRMID) jrw+=nFF;
- if (fabs(dzx) <= CRMID + .25) jrw+=nFF;
- if (fabs(dzx) <= CRMID + .50) jrw+=nFF;
- if (fabs(dzx) <= CRMID + .75) jrw+=nFF;
- if (fabs(dzx) <= CRMID + 1.0) jrw+=nFF;
- if (fabs(dzx) <= CRMID + 1.25) jrw+=nFF;
- if (fabs(dzx) <= CRMID + 1.50) jrw+=nFF;
- if (fabs(dzx) <= CRMID + 1.75) jrw+=nFF;
- if (fabs(dzx) <= CRMID + 2.00) jrw+=nFF;
-
- if (fabs(dzy) <= CIMID) jrw+=nFF;
- if (fabs(dzy) <= CIMID + .25) jrw+=nFF;
- if (fabs(dzy) <= CIMID + .50) jrw+=nFF;
- if (fabs(dzy) <= CIMID + .75) jrw+=nFF;
- if (fabs(dzy) <= CIMID + 1.0) jrw+=nFF;
- if (fabs(dzy) <= CIMID + 1.25) jrw+=nFF;
- if (fabs(dzy) <= CIMID + 1.50) jrw+=nFF;
- if (fabs(dzy) <= CIMID + 1.75) jrw+=nFF;
- if (fabs(dzy) <= CIMID + 2.00) jrw+=nFF;
-
- break;
-
- case 10:
- dmax = fabs(CRMAX - CRMIN);
-
- if (fabs(dzx) <= CRMID + 0) jrw+=nFF;
- if (fabs(dzx) <= CRMID + dmax/2) jrw+=nFF;
- if (fabs(dzx) <= CRMID + dmax/3) jrw+=nFF;
- if (fabs(dzx) <= CRMID + dmax/4) jrw+=nFF;
- if (fabs(dzx) <= CRMID + dmax/5) jrw+=nFF;
- if (fabs(dzx) <= CRMID + dmax/6) jrw+=nFF;
- if (fabs(dzx) <= CRMID + dmax/7) jrw+=nFF;
- if (fabs(dzx) <= CRMID + dmax/8) jrw+=nFF;
- if (fabs(dzx) <= CRMID + dmax/9) jrw+=nFF;
-
- dmax = fabs(CIMAX - CIMIN);
-
- if (fabs(dzy) <= CIMID + 0) jrw+=nFF;
- if (fabs(dzy) <= CIMID + dmax/2) jrw+=nFF;
- if (fabs(dzy) <= CIMID + dmax/3) jrw+=nFF;
- if (fabs(dzy) <= CIMID + dmax/4) jrw+=nFF;
- if (fabs(dzy) <= CIMID + dmax/5) jrw+=nFF;
- if (fabs(dzy) <= CIMID + dmax/6) jrw+=nFF;
- if (fabs(dzy) <= CIMID + dmax/7) jrw+=nFF;
- if (fabs(dzy) <= CIMID + dmax/8) jrw+=nFF;
- if (fabs(dzy) <= CIMID + dmax/9) jrw+=nFF;
- break;
-
- case 11:
- if (CRMAX > 2 || CIMAX > 2)
- {
- if (CRMAX > CIMAX)
- dmax = CRMAX;
- else
- dmax = CIMAX;
- }
- else
- dmax = 2;
-
- delta10 = dmax/10;
-
- for (dlz=0 ; dlz<=dmax ; dlz+=delta10)
- {
- if (fabs(dzx) <= dlz) jrw+=nFF;
- if (fabs(dzy) <= dlz) jrw+=nFF;
- }
- break;
-
- case 12: // Initialize c = (c^n).clog;
- break;
-
- case 15: //
- if (dzx_save < fabs(dzx))
- {
- dzx_save = fabs(dzx);
- jrw+=nFF;
- }
- if (dzy_save < fabs(dzy))
- {
- dzy_save = fabs(dzy);
- jrw+=nFF;
- }
- break;
-
- case 16: //
- if (dzx_save == 0)
- dzx_save = 99;
- if (dzy_save == 0)
- dzy_save = 99;
-
- if (dzx_save > fabs(dzx))
- {
- dzx_save = fabs(dzx);
- jrw+=nFF;
- }
- if (dzy_save > fabs(dzy))
- {
- dzy_save = fabs(dzy);
- jrw+=nFF;
- }
- break;
-
- case 17: //
- if (dzx_save == 0)
- {
- bPositiveX=FALSE;
- bPositiveY=FALSE;
- }
-
- if (fabs(dzx) >= dzx_save)
- {
- // Count the Positive Slope Change
- if (!bPositiveX)
- {
- jrw+=nFF;
- bPositiveX = TRUE;
- }
- }
- else
- {
- // Count the Negative Slope Change
- if (bPositiveX)
- {
- jrw+=nFF;
- bPositiveX = FALSE;
- }
- }
-
- if (fabs(dzy) >= dzy_save)
- {
- // Count the Positive Slope Change
- if (!bPositiveY)
- {
- jrw+=nFF;
- bPositiveY=TRUE;
- }
- }
- else
- {
- // Count The Negative Slope Change
- if (bPositiveY)
- {
- jrw+=nFF;
- bPositiveY=FALSE;
- }
- }
-
- dzx_save = fabs(dzx);
- dzy_save = fabs(dzy);
-
- break;
-
- case 18: //
- if (dzx_save == 0)
- {
- bPositiveX=FALSE;
- bPositiveY=FALSE;
- z1 = z;
- dzx_save = 99;
- jrw = NMAX/4;
- return;
-
- }
-
- //if (z.real() >= z1.real() || z.imag() >= z1.imag())
- if (fabs(z.real()) >= fabs(z1.real()) || fabs(z.imag()) >= fabs(z1.imag()))
- //if (z.squares() >= z1.squares())
- {
- // Count the Positive Slope No Change
- if (!bPositiveX)
- {
- bPositiveX = TRUE;
- if (jrw-nFF > 0)
- jrw-=nFF;
- }
- else
- {
- if (jrw+(nFF*2) < NMAX)
- jrw+=(nFF*2);
- }
- }
- else
- {
- // Count the Negative Slope No Change
- if (bPositiveX)
- {
- bPositiveX = FALSE;
- if (jrw-nFF > 0)
- jrw-=nFF;
- }
- else
- {
- if (jrw+(nFF*2) < NMAX)
- jrw+=(nFF*2);
- }
- }
-
- z1 = z;
-
- break;
-
- case 19:
- dzx_save += fabs(dzx);
- dzy_save += fabs(dzy);
-
- break;
-
- case 20:
- if (dzx < .01 && dzx > -.01)
- {
- if (dzx < 0)
- dzx = -.01;
- else
- dzx = .01;
- }
-
- if (dzy < .01 && dzy > -.01)
- {
- if (dzy < 0)
- dzy = -.01;
- else
- dzy = .01;
- }
-
- dzx_save += log(fabs(dzx));
- dzy_save += log(fabs(dzy));
-
- break;
-
- case 23:
-
- k = i;
- r = dzx*dzx+dzy*dzy;
- if (k == 0) { k1 = 1; rz = r; }
- else if (k == 1)
- {
- if (r > rz) rzflag = 1;
- else rzflag = -1;
- rz = r;
- }
- else
- {
- if (r > rz && rzflag != 1)
- {
- jrw+=nFF;
- rzflag = 1;
- }
- else
- if (r < rz && rzflag != -1)
- {
- jrw+=nFF;
- rzflag = -1;
- }
- rz = r;
- }
- break;
-
- case 24:
- z.set_real(z.real()-dF/sin(z.real()));
- z.set_imag(z.imag()-dF/sin(z.imag()));
-
- break;
-
- case 25:
- if (z.real() >= 0 && z.imag() >= 0) // Top,Right
- z = z-cmplx(dF,dF)/z.csin();
- else
- if (z.real() >= 0 && z.imag() < 0) // Bottom, Right
- z = z-cmplx(dF,-dF)/z.csin();
- else
- if (z.real() < 0 && z.imag() < 0) // Bottom, Left
- z = z-cmplx(-dF,-dF)/z.csin();
- else
- z = z-cmplx(-dF,+dF)/z.csin(); // Top, Left
-
- break;
-
- case 30:
- // Counting
-
- if (fabs(dzx)>fabs(dzy))
- cNMAX.set_real(cNMAX.real() - fabs(dzx) - fabs(dzx_save));
- else
- cNMAX.set_imag(cNMAX.imag() - fabs(dzy) - fabs(dzy_save));
-
- dzx_save = dzx;
- dzy_save = dzy;
-
- // cNMAX = z+cmplx((c.real())*(CRMAX-CIMIN), (c.imag())*(CIMAX-CIMIN));
-
- // cNMAX += cmplx(dzx+c.real()/(CRMAX-CIMIN), dzy+c.imag()/(CIMAX-CIMIN));
-
- // cNMAX = cNMAX+cmplx(1/dzx+c.real(),1/dzy+c.imag());
-
- // cNMAX = cNMAX+cmplx(1/dzx,1/dzy)+c;
-
- // cNMAX = cNMAX+cmplx(1/dzx,1/dzy)+c;
- break;
-
-
- ////////////////////////////
- // Category 2 filters
- case 130: //
- //if (fabs(dzx) < dStrands || fabs(dzy) < dStrands)
- //i3++;
-
- //rr = (sin(fabs(1 + cx_hi - cx_lo)) * sin(fabs(1 + cy_hi - cy_lo))) * 40;
-
- if (i <= 1)
- {
- x_rmin = dzx;
- x_rmax = dzx;
- y_rmin = dzy;
- y_rmax = dzy;
- }
- else
- {
- if (x_rmin > dzx)
- x_rmin = dzx;
- if (x_rmax < dzx)
- x_rmax = dzx;
-
- if (y_rmin > dzy)
- y_rmin = dzy;
- if (y_rmax < dzy)
- y_rmax = dzy;
- }
-
- break;
-
- case 131:
- if ((fabs(dzx) <= dStrands_HI && fabs(dzx) > dStrands_LO) || (fabs(dzy) <= dStrands_HI && fabs(dzy) > dStrands_LO))
- rr+=log(dzx*dzx+dzy*dzy)*13; // Don't mess with this
-
- if (fabs(dzx) < dStrands || fabs(dzy) < dStrands)
- i3++;
-
- break;
-
- case 132:
- if (dzx*dzx+dzy*dzy < limit)
- i3++;
- break;
-
- case 133:
- if (dzx < dStrands && dzx > -dStrands)
- {
- if (dzx < 0)
- dzx = -dStrands;
- else
- dzx = dStrands;
- }
-
- if (dzy < dStrands && dzy > -dStrands)
- {
- if (dzy < 0)
- dzy = -dStrands;
- else
- dzy = dStrands;
- }
-
- dzx_save += log(fabs(dzx));
- dzy_save += log(fabs(dzy));
-
- if ((fabs(dzx) <= dStrands_HI && fabs(dzx) > dStrands_LO) || (fabs(dzy) <= dStrands_HI && fabs(dzy) > dStrands_LO))
- rr+=log(dzx*dzx+dzy*dzy)*13; // Don't mess with this
-
- if (dzx*dzx+dzy*dzy < limit)
- i3++;
-
- break;
-
- case 134:
- rr+=log(dzx*dzx+dzy*dzy)*10;
- if (fabs(dzx) > dStrands || fabs(dzy) > dStrands)
- i+=nFF;
- //i%=NMAX;
- break;
-
- case 135:
- if (fabs(dzx) < limit || fabs(dzy) < limit)
- rr+=log(dzx*dzx+dzy*dzy)*10;
- else
- i+=nFF;
- //i%=NMAX;
- break;
-
- case 136:
- rr+=log(dzx*dzx+dzy*dzy)*10;
- if (fabs(dzx) > limit || fabs(dzy) > limit)
- i+=nFF;
- //i%=NMAX;
- break;
-
- case 137:
- if (fabs(dzx) < limit || fabs(dzy) < limit)
- rr+=log(dzx*dzx+dzy*dzy)*10;
- else
- i+=nFF;
- //i%=NMAX;
- break;
-
- case 138:
- rr+=log(dzx*dzx+dzy*dzy)*10;
- if (fabs(1/dzx*dzy) > limit)
- i+=nFF;
- //i%=NMAX;
- break;
-
- case 139:
- rr+=log(dzx*dzx+dzy*dzy)*10;
- if (fabs(dzx) > limit || fabs(dzy) > limit)
- i+=nFF;
- //i%=NMAX;
-
- dzx_save = dzx;
- dzy_save = dzy;
- break;
-
- case 140:
- rr+=log(dzx*dzx+dzy*dzy)*2;
- if (fabs(dzx) > limit || fabs(dzy) > limit)
- i+=nFF;
- //i%=NMAX;
-
- dzx_save = dzx;
- dzy_save = dzy;
- break;
-
- case 141:
- rr+=log(dzx*dzx+dzy*dzy)*nBay100;
- //if (fabs(dzx) > limit || fabs(dzy) > limit)
- //i+=nFF;
- //i%=NMAX;
-
- dzx_save = dzx;
- dzy_save = dzy;
-
- break;
-
- case 142:
- rr+=log(dzx*dzx+dzy*dzy);
- if (fabs(dzx) > limit || fabs(dzy) > limit)
- i+=nFF;
- //i%=NMAX;
-
- dzx_save = dzx;
- dzy_save = dzy;
- break;
-
- case 143:
- rr+=log(dzx*dzx+dzy*dzy)*8;
- if (fabs(dzx) > limit || fabs(dzy) > limit)
- i+=nFF;
- //i%=NMAX;
-
- dzx_save = dzx;
- dzy_save = dzy;
- break;
-
- case 144:
- if (fabs(dzx) < dStrands || fabs(dzy) < dStrands)
- //rr+=log(dzx*dzx+dzy*dzy)*3; // Don't mess with this
- rr+=nFF;
-
- dzx_save = dzx;
- dzy_save = dzy;
- break;
-
- case 145:
- if (fabs(dzx) < dStrands || fabs(dzy) < dStrands)
- //rr+=log(dzx*dzx+dzy*dzy)*3; // Don't mess with this
- rr+=nFF;
-
- dzx_save = dzx;
- dzy_save = dzy;
- break;
-
- case 146:
- rr+=log(dzx*dzx+dzy*dzy)*(1+nBay100);
-
- //if (fabs(dzx) > limit || fabs(dzy) > limit)
- //i+=nFF;
-
- //dzx_save = dzx;
- //dzy_save = dzy;
-
- break;
-
- case 147:
- rr+=log(dzx*dzx+dzy*dzy)*(1+nBay100);
-
- //if (fabs(dzx) > limit || fabs(dzy) > limit)
- //i+=nFF;
-
- dzx_save = dzx;
- dzy_save = dzy;
-
- break;
-
- default:
- break;
- }
-
- if (bGeometry)
- {
- if (bFilter14) // Swap real and imaginary components
- {
- z.set_real(dzy);
- z.set_imag(dzx);
- }
-
- if (bFilter21) // Double
- {
- if (dzx >= 0)
- z.set_real(z.real()-2);
- else
- z.set_real(z.real()+2);
- }
-
- if (bFilter22) // Quad
- {
- if (dzx >= 0)
- z.set_real(z.real()-2);
- else
- z.set_real(z.real()+2);
-
- if (dzy >= 0)
- z.set_imag(z.imag()-2);
- else
- z.set_imag(z.imag()+2);
- }
-
- if (bFilter26) // z^n
- z=z^cFilter26;
-
- if (bFilter31)
- z=z*z.csin();
-
- if (bFilter32)
- z=z*z.ccos();
-
- if (bFilter33)
- z=z*z.clog();
-
- if (bFilter34)
- z=z*tangent(z);
-
- if (bFilter35)
- z=z*sinh(z);
-
- if (bFilter36)
- z=z*asin(z);
-
- if (bFilter37)
- z=z*acos(z);
-
- if (bFilter38)
- z=z*arctan(z);
- }
-
- if (bMFilter)
- {
- // Make sure i is within limits
- if (i >= NMAX || i < 0)
- i = NMAX - 1;
-
- // Store the data into the temp arrays for Standard Deviation
- // and Fractal Dimension calculations
- if (nPreFractal)
- {
- pXTemp[i] = z.real();
- pYTemp[i] = z.imag();
- }
- else
- {
- pXTemp[i] = dzx;
- pYTemp[i] = dzy;
- }
- }
-
- if (bOrbits)
- {
- if (px == rb_center_x && py == rb_center_y)
- {
- CIterationsDoc* pDoc = GetDocument();
-
- pDoc->lpCt[i] = i;
- pDoc->lpX1[i] = dzx;
- pDoc->lpY1[i] = dzy;
-
- //return;
-
- }
- }
-
- if (bQuickMode && nFilter != 29 )
-
- {
- if (nDistortion <= 69 && nDistortion >= 61)
- // Don't apply to Newton Type Fractals 61 - 69
- return;
-
- if (fabs(dzx-dzx_save_quick) < dF28 && fabs(dzy-dzy_save_quick) < dF28)
- {
- if (bOrbits)
- {
- for (i2 = i ; i2<NMAX ; i2++)
- {
- // fill remaining
- //pXTemp[i2] = dzx;
- //pYTemp[i2] = dzy;
-
- CIterationsDoc* pDoc = GetDocument();
-
- pDoc->lpCt[i2] = i2;
- pDoc->lpX1[i2] = dzx;
- pDoc->lpY1[i2] = dzy;
-
- //AfxMessageBox("Q_1");
- }
- }
-
- bQuickAbort = TRUE;
- iQuickAbort = i;
-
- i = NMAX;
- }
- else
- bQuickAbort = FALSE;
-
- //if (bQuickAbort && bOrbits)
- // AfxMessageBox("Q_2");
-
- dzx_save_quick = dzx;
- dzy_save_quick = dzy;
- }
- }
-
- void CIterationsView::Filter_Complete()
- {
- if (i >= NMAX-1)
- b_MAX = TRUE;
- else
- b_MAX = FALSE;
-
- if (bQuickMode && nFilter != 29)
- {
- if (bQuickAbort)
- i = NMAX - 1;
- // i = iQuickAbort;
-
- }
-
- if (bOrbits)
- {
- if (px == rb_center_x && py == rb_center_y)
- {
- CIterationsDoc* pDoc = GetDocument();
- pDoc->i_sav4orb = i;
-
- if (i < 0 || i > NMAX)
- {
- char cstr[81];
- wsprintf(cstr,"Cannot Plot i=%d, Min=2, Max=%d",i, NMAX-1);
- AfxMessageBox(cstr);
- return;
- }
-
- // if (i < NMAX - 2)
- // {
- // i++;
- // pDoc->i_sav4orb = i;
- //
- // // Get Last bailout values
- // pDoc->lpCt[i] = i;
- // pDoc->lpX1[i2] = z.real();
- // pDoc->lpY1[i2] = z.imag();
- //
- // }
-
- //pDoc->lpCt[0] = 0;
- //pDoc->lpX1[0] = 0;
- //pDoc->lpY1[0] = 0;
-
- // Initialize the range with the first value
- x_rmin = pDoc->lpX1[0]; // x range min
- x_rmax = pDoc->lpX1[0]; // x range max
- y_rmin = pDoc->lpY1[0]; // y range min
- y_rmax = pDoc->lpY1[0]; // y range max
-
- for (i2 = 0 ; i2 <= i ; i2++)
- {
-
- // Create range array
- // pDoc->lpR1[i2] = pDoc->lpX1[i2] + pDoc->lpY1[i2];
- if (pDoc->lpX1[i2] > x_rmax)
- x_rmax = pDoc->lpX1[i2];
- if (pDoc->lpX1[i2] < x_rmin)
- x_rmin = pDoc->lpX1[i2];
-
- if (pDoc->lpY1[i2] > y_rmax)
- y_rmax = pDoc->lpY1[i2];
- if (pDoc->lpY1[i2] < y_rmin)
- y_rmin = pDoc->lpY1[i2];
-
- if (i2 % 2 == 0)
- {
- // Even max
- if (x_rmax > y_rmax)
- pDoc->lpR1[i2] = x_rmax;
- else
- pDoc->lpR1[i2] = y_rmax;
- }
- else
- {
- // Odd min
- if (x_rmin < y_rmin)
- pDoc->lpR1[i2] = x_rmin;
- else
- pDoc->lpR1[i2] = y_rmin;
- }
- }
-
- // if (x_rmin < y_rmin)
- // pDoc->lpR1[i2-2] = x_rmin;
- // else
- // pDoc->lpR1[i2-2] = y_rmin;
- //
- // if (x_rmax > y_rmax)
- // pDoc->lpR1[i2-1] = x_rmax;
- // else
- // pDoc->lpR1[i2-1] = y_rmax;
-
- if (x_rmin < y_rmin)
- pDoc->lpR1[0] = x_rmin;
- else
- pDoc->lpR1[0] = y_rmin;
-
- if (x_rmax > y_rmax)
- pDoc->lpR1[1] = x_rmax;
- else
- pDoc->lpR1[1] = y_rmax;
-
- pDoc->UpdateAllGraphs();
- }
- }
-
-
- switch(nFilter)
- {
- case 14:
- return;
-
- case 15:
- case 16:
- case 17:
-
- i = jrw;
- i = abs(i);
- i %= NMAX;
- return;
-
- case 18:
-
- // An Inside Filter
- if (i >= NMAX-1)
- i = jrw;
- else
- i += jrw;
-
- i = abs(i);
- i %= NMAX;
- return;
-
- case 19:
- if (i != 0)
- i = (int) (((dzx_save + dzy_save)/(double)(i*2)) * 10 * nBay100);
- i = abs(i);
- if (i >= NMAX) i %= (NMAX-1);
- return;
-
- case 20:
- if (dzx_save >= dzy_save)
- i = (int) ((dzx_save - dzy_save) * nBay100);
- else
- i = (int) ((dzy_save - dzx_save) * nBay100);
-
- i = abs(i);
- if (i >= NMAX) i %= NMAX;
- return;
-
- case 23:
- // An Inside Filter
- if (i >= NMAX-1)
- i = jrw;
- else
- i += jrw;
-
- i = abs(i);
- i %= NMAX;
- return;
-
- case 30:
- i = (int) fabs((cNMAX.squares() * nBay100));
- if (i >= NMAX) i %= (NMAX-1);
- return;
-
- case 130:
- //i = i3;
- //i = (int) ((sin(fabs(1 + x_rmax - x_rmin)) * sin(fabs(1 + y_rmax - y_rmin))) * 40);
- i = (int) (atan(fabs(x_rmax * x_rmin)/fabs(y_rmax * y_rmin)) * 40);
-
- return;
-
- case 131:
- if (i >= NMAX-1)
- i = i3;
- else
- i = (int)rr;
- return;
-
- case 132:
- i = i3;
- return;
-
- case 133:
- if (rr != 0 && i3 != 0)
- i = (int)(fabs(dzy_save - dzx_save) + fabs(rr + i3));
- else
- if (rr != 0)
- i = (int)(fabs(dzy_save - dzx_save) + fabs(rr));
- else
- if (i3 != 0)
- i = (int)fabs(dzy_save - dzx_save) + i3;
- else
- i = (int)fabs(dzy_save - dzx_save);
- return;
-
- case 134:
- rr = (double) ((int)rr%(NMAX/2));
- if ((int)(z.real()*2)%2 == 0 || (int)(z.imag()*2)%2 == 0)
- i = (int)rr;
- else
- i = (int)rr + (NMAX/2);
- return;
-
- case 135:
- rr = (double) ((int)rr%(NMAX/2));
- if ((int)(z.real()*2)%2 == 0 || (int)(z.imag()*2)%2 == 0)
- i = (int)rr;
- else
- i = (int)rr + (NMAX/2);
- return;
-
- case 136:
- i = (int)rr;
- return;
-
- case 137:
- i = (int)rr;
- return;
-
- case 138:
- i = (int)rr;
- return;
-
- case 139:
- i = (int)(atan(dzx_save/dzy_save) * 80);
- return;
-
- case 140:
- i = (int)(rr + atan(fabs(dzx_save/dzy_save)) * 30);
- return;
-
- case 141:
- //i += (int)(rr);
- i = (int)rr;
-
- //i = (int)(rr + atan(fabs(dzx_save/dzy_save)) * 30);
-
- // i = (int)(rr + atan(fabs(dzx_save/dzy_save)) * 70);
- // i = i%(NMAX/2);
- // if ((int)rr%2 == 1)
- // i += (NMAX/2);
- return;
-
- case 142:
- i = (int)(rr + atan(fabs(dzx_save/dzy_save)) * 50);
- return;
-
- case 143:
- i = (int)(rr/3 + atan(fabs(dzx_save/dzy_save)) * 30);
- if ((int)atan(fabs(dzx_save/dzy_save))%2 == 0 && i < (NMAX/2))
- i += (NMAX/2);
- return;
-
- case 144:
- i = (int) (atan(fabs(z.imag()/z.real())) * 13 + (rr * 10));
-
- return;
-
- case 145:
- // if (rr > 1)
- // i = (int) (atan(fabs(z.imag()/z.real())) * nBay100 * 1
- // * (rr * nBay1000 * 1));
-
- // i = (int) (atan(fabs(z.imag()/z.real())) * nBay100 * 1
- // + (rr * nBay1000 * 5));
-
- // if (rr > 1)
- // i += (int) (rr * nBay100 * 10 *
- // (atan(fabs(z.imag()/z.real())) * nBay100));
- // else
- // i = 0;
-
- if (rr >= 1)
- i = (int) (atan(fabs(z.imag()/z.real())) * nBay100 * 5
- + (rr * nBay1000 * 5));
- else
- i = 0;
-
- return;
-
- case 146:
- i = (int)rr;
- return;
-
- case 147:
- i = (int)(rr + atan(fabs(dzx_save/dzy_save)) * (10+nBay1000));
- return;
-
- }
-
- if (bMFilter)
- {
- if (i >= NMAX)
- i = NMAX - 1;
-
- // Set up to Calculate the Fractal Dimension
- if (i < NMAX)
- {
- // Finish out the array with the last value
- for (i2 = i ; i2<NMAX ; i2++)
- {
- pXTemp[i2] = z.real();
- pYTemp[i2] = z.imag();
- }
- }
-
- // Initialize the mean with zero
- x_mean = 0;
- y_mean = 0;
-
- // Initialize the range with the first value
- x_rmin = pXTemp[0]; // x range min
- x_rmax = pXTemp[0]; // x range max
- y_rmin = pYTemp[0]; // y range min
- y_rmax = pYTemp[0]; // y range max
-
- switch(nFilter)
- {
- case 29: // Fractal Dimension
- if (i < 3)
- return;
-
- if (bQuickMode)
- {
- iQuickAbort = NMAX;
- JMAX = NMAX = i;
- }
-
- for (i2 = 0 ; i2<NMAX ; i2++)
- {
- // Get sum x and y
- x_mean += pXTemp[i2];
- y_mean += pYTemp[i2];
-
- // Get min x
- if (pXTemp[i2] < x_rmin)
- x_rmin = pXTemp[i2];
-
- // Get max x
- if (pXTemp[i2] > x_rmax)
- x_rmax = pXTemp[i2];
-
- // Get min y
- if (pYTemp[i2] < y_rmin)
- y_rmin = pYTemp[i2];
-
- // Get max y
- if (pYTemp[i2] > y_rmax)
- y_rmax = pYTemp[i2];
- }
-
- x_mean = x_mean / NMAX;
- y_mean = y_mean / NMAX;
-
- x_std = 0;
- y_std = 0;
-
- for (i2 = 0 ; i2<NMAX ; i2++)
- {
- x_std = x_std + (pXTemp[i2] - x_mean)*(pXTemp[i2] - x_mean);
- y_std = y_std + (pYTemp[i2] - y_mean)*(pYTemp[i2] - y_mean);
- }
-
- x_std = sqrt(x_std / (NMAX-1)); // Standard Deviation x
- y_std = sqrt(y_std / (NMAX-1)); // Standard Deviation y
-
- // Initialize complex variables
- cx_std = cmplx(x_std, 0); // Complex Standard deviation x
- cy_std = cmplx(y_std, 0); // Complex Standard deviation y
-
- cFDx = cmplx (1, 0); // Complex Fractal Dimension x
- cFDy = cmplx (1, 0); // Complex Fractal Dimension y
-
- cRng_x = cmplx (x_rmax - x_rmin, 0); // Complex Range x
- cRng_y = cmplx (y_rmax - y_rmin, 0); // Complex Range y
-
- cNMAX = cmplx (NMAX, 0);
-
- //////////////////////////////////////////////////////////////
- // Fractal Dimension Equation ...
- // Ju = Upper Jaenisch coefficient
- // Initialize Ju=1;
- // Iterate Ju = [log(R/S*N*J]/[log(1/N)] until abs(Ju+1)-Ju < .0001.
- // if ( 0 <= J <= .5,) D(j) = 1/(1-Ju)
- // if (.5 <= J <= 1.0) D(j) = 1/Ju.
- ///////////////////////////////////////////////////////////////
-
- //////////////////////////////////////////////////////////////
- // Real
- ////////////////////////////////////////////////////////////
- dm = 99;
- da = 0;
- nDIter_x = 0;
- denominator = log((double)(1.0/(double)NMAX));
- //while (fabs(da - dm) > .0001 && nDIter_x++ < NMAX-2)
- while (fabs(da - dm) > .0001 && nDIter_x++ < 10000)
- {
- // Calculate Fractal Dimension (real)
- da = dm;
- cFDx = (cRng_x/(cx_std*cNMAX*cFDx)).clog()/denominator;
- dm = cFDx.real();
- if (nDIter_x == 1)
- dFDx_0 = 2.0 - dm;
- }
-
- dFDx = cFDx.real();
-
- if (dFDx <= .5)
- dFDx = 1 / (1 - dFDx);
- else
- dFDx = 1 / dFDx;
-
- ////////////////////////////////////////////////////////////
- // Imaginary
- ////////////////////////////////////////////////////////////
- dm = 99;
- da = 0;
- nDIter_y = 0;
- denominator = log((double)(1.0/(double)NMAX));
- //while (fabs(da - dm) > .0001 && nDIter_y++ < NMAX-2)
- while (fabs(da - dm) > .0001 && nDIter_y++ < 10000)
- {
- // Calculate Fractal Dimension (real)
- da = dm;
- cFDy = (cRng_y/(cy_std*cNMAX*cFDy)).clog()/denominator;
- dm = cFDy.real();
- if (nDIter_y == 1)
- dFDy_0 = 2.0 - dm;
- }
-
- dFDy = cFDy.real();
-
- if (dFDy <= .5)
- dFDy = 1 / (1 - dFDy);
- else
- dFDy = 1 / dFDy;
- ////////////////////////////////////////////////////////////
-
- ////////////////////////////////////////////////////////////
- // Apply Fractal Dimension to a color
-
- switch (nFDOption)
- {
- // case 0:
- // // Addition
- // jrw = (int) ((dFDx+dFDy) * 100 * nBay100);
- // break;
-
- case 1:
- // Fractal Dimension Real Initial (FD_0)
- jrw = (int) (dFDx_0 * 100.0 * nBay100);
- break;
-
- case 2:
- // Fractal Dimension Imginary Initial (FD_0)
- jrw = (int) (dFDy_0 * 100.0 * nBay100);
- break;
-
- case 3:
- // (FD_0) Addition
- jrw = (int) ((dFDx_0+dFDy_0) * 100 * nBay100);
- break;
-
- case 4:
- // (FD_0) Sum of Squares
- jrw = (int) ((dFDx_0*dFDx_0+dFDy_0*dFDy_0) * 100 * nBay100);
- break;
-
- case 5:
- // (FD_0) Multiplication
- jrw = (int) (dFDx_0 * dFDy_0 * 100 * nBay100);
- break;
-
- case 6:
- // Fractal Dimension Real
- jrw = (int) (dFDx * 100.0 * nBay100);
- break;
-
- case 7:
- // Fractal Dimension Imginary
- jrw = (int) (dFDy * 100.0 * nBay100);
- break;
-
- case 8:
- // FD Addition
- jrw = (int) ((dFDx+dFDy) * 100 * nBay100);
- break;
-
- case 9:
- // FD Sum of Squares
- jrw = (int) ((dFDx*dFDx+dFDy*dFDy) * 100 * nBay100);
- break;
-
- case 10:
- // FD Multiplication
- jrw = (int) (dFDx * dFDy * 100 * nBay100);
- break;
-
- default:
- AfxMessageBox("FD Error");
- break;
- }
-
- if (bQuickMode)
- {
- //i = NMAX + abs(jrw);
- i = abs(jrw);
- NMAX = iQuickAbort;
- if (i >= NMAX) i %= (NMAX-1);
- }
- else
- {
- i = abs(jrw);
- if (i >= NMAX) i %= (NMAX-1);
- }
-
- return;
-
- break;
-
- default: // Standard deviation by default
- for (i2 = 0 ; i2<i ; i2++)
- {
- // Get sum x and y
- x_mean += pXTemp[i2];
- y_mean += pYTemp[i2];
-
- // Get min x
- if (pXTemp[i2] < x_rmin)
- x_rmin = pXTemp[i2];
-
- // Get max x
- if (pXTemp[i2] > x_rmax)
- x_rmax = pXTemp[i2];
-
- // Get min y
- if (pYTemp[i2] < y_rmin)
- y_rmin = pYTemp[i2];
-
- // Get max y
- if (pYTemp[i2] > y_rmax)
- y_rmax = pYTemp[i2];
- }
-
- if (i != 0)
- {
- x_mean = x_mean / (double)i;
- y_mean = y_mean / (double)i;
- }
-
- x_std = 0;
- y_std = 0;
-
- for (i2 = 0 ; i2<i ; i2++)
- {
- x_std = x_std + (pXTemp[i2] - x_mean)*(pXTemp[i2] - x_mean);
- y_std = y_std + (pYTemp[i2] - y_mean)*(pYTemp[i2] - y_mean);
- }
-
- if (i>1)
- {
- x_std = (x_std / (i-1));
- y_std = (y_std / (i-1));
- }
- else
- {
- x_std = 0;
- y_std = 0;
- }
-
- if (x_std == 0 && y_std == 0)
- jrw = 0;
- else
- jrw = (int) (log((x_std + y_std)/2) * 10 * nBay100);
-
- i = abs(jrw);
-
- if (i >= NMAX) i %= (NMAX-1);
- return;
- }
- }
-
- if (i<NMAX)
- i += jrw;
- else
- i = jrw;
-
- i = abs(i);
- if (i >= NMAX) i %= (NMAX-1);
- }
-